home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Freeware 31 / FreelogHS31.iso / ArgentCompta / FASTCAISSE / Setup FASTCAISSE.exe / {app} / A faire73.sql < prev    next >
Text File  |  2006-10-23  |  15KB  |  528 lines

  1. ALTER TABLE ARTICLES ADD RETOUR VARCHAR(18);
  2. ALTER TABLE LIGNES ADD MARGE DECIMAL(14,6);
  3. ALTER TABLE ARTICLES ADD TYPEMARGE SMALLINT;
  4. ALTER TABLE ARTICLES ADD MARGE DECIMAL(14,6);
  5.  
  6. CREATE PROCEDURE "GET_LAST_DPA"
  7. (
  8.   "INDX" INTEGER
  9. )
  10. RETURNS
  11. (
  12.   "DPA" DECIMAL(12, 2)
  13. )
  14. AS
  15. BEGIN
  16. FOR SELECT DPA FROM ARTFOUR WHERE INDXART=:INDX AND DPA>0 ORDER BY DATEACHAT INTO :DPA DO
  17.   begin
  18.   end
  19. SUSPEND;
  20. END
  21.  ;
  22.  
  23. CREATE PROCEDURE "GET_PMPA"
  24. (
  25.   "INDX" INTEGER
  26. )
  27. RETURNS
  28. (
  29.   "PMPA" DECIMAL(12, 2)
  30. )
  31. AS
  32. DECLARE VARIABLE PRIX DECIMAL(14,6);
  33. DECLARE VARIABLE QUANTITE DECIMAL(11,2);
  34. DECLARE VARIABLE REMISE DECIMAL(5,2);
  35. DECLARE VARIABLE OLD_PMPA DECIMAL(12,2);
  36. DECLARE VARIABLE NOMBRE DECIMAL(14,6);
  37. DECLARE VARIABLE CDA DECIMAL(11,2);
  38. DECLARE VARIABLE TOTALPA DECIMAL(14,4);
  39. BEGIN
  40. TOTALPA=0;
  41. NOMBRE=0;
  42. /* Selectionner factures achat */
  43. FOR SELECT PRIX,QUANTITE,REMISE FROM LIGNES L
  44. JOIN PIECES P ON P.INDX=l.INDEXPIECE  AND TYPEPIECE=14
  45. WHERE INDEXARTICLE=:INDX
  46. AND QUANTITE IS NOT NULL
  47. AND QUANTITE>0
  48. INTO :PRIX,:QUANTITE,:REMISE DO
  49.   BEGIN
  50.   SELECT MAX(LOT) FROM ARTFOUR WHERE DPA=:PRIX AND INDXART=:INDX INTO CDA;
  51.   IF ((CDA IS NOT NULL) AND (CDA>0)) THEN PRIX = PRIX / CDA;
  52.   IF ((REMISE IS NOT NULL) AND (REMISE<>0)) THEN PRIX = PRIX * (100 - REMISE) / 100;
  53.   TOTALPA = TOTALPA + (PRIX * QUANTITE);
  54.   NOMBRE = NOMBRE + QUANTITE;
  55.   END
  56. IF (NOMBRE=0) THEN SELECT DPA FROM GET_LAST_DPA(:INDX) INTO :PMPA;
  57. ELSE PMPA = TOTALPA / NOMBRE;
  58. SELECT PMPA FROM ARTICLES WHERE INDX=:INDX INTO :OLD_PMPA;
  59. IF (PMPA<>OLD_PMPA) THEN UPDATE ARTICLES SET PMPA=:PMPA WHERE INDX=:INDX;
  60. SUSPEND;
  61. END
  62.  ;
  63.  
  64. CREATE PROCEDURE "GET_MARGE_LIGNE"
  65. (
  66.   "INDEX_PIECE" INTEGER,
  67.   "NO_LIGNE" SMALLINT
  68. )
  69. RETURNS
  70. (
  71.   "MARGE" DECIMAL(14, 6)
  72. )
  73. AS
  74. DECLARE VARIABLE INDXA INTEGER;
  75. DECLARE VARIABLE PRIX DECIMAL(14,6);
  76. DECLARE VARIABLE QUANTITE DECIMAL(11,2);
  77. DECLARE VARIABLE REMISE DECIMAL(5,2);
  78. DECLARE VARIABLE DPAU DECIMAL(14,4);
  79. DECLARE VARIABLE PMPA DECIMAL(14,4);
  80. DECLARE VARIABLE MARGE_L DECIMAL(14,4);
  81. DECLARE VARIABLE MARGE_A DECIMAL(14,4);
  82. DECLARE VARIABLE TYPE_MARGE SMALLINT;
  83. BEGIN
  84. SELECT L.INDEXARTICLE,L.PRIX,L.QUANTITE,L.REMISE,L.MARGE,A.DPAUHT,A.PMPA,A.TYPEMARGE,A.MARGE FROM LIGNES L
  85. JOIN ARTICLES A ON A.INDX=L.INDEXARTICLE
  86. WHERE L.INDEXPIECE=:INDEX_PIECE AND L.NOLIGNE=:NO_LIGNE
  87. INTO :INDXA,:PRIX,:QUANTITE,:REMISE,:MARGE_L,:DPAU,:PMPA,:TYPE_MARGE,:MARGE_A;
  88. /* Si pas d'article, pas de calcul */
  89. IF (MARGE_L IS NULL) THEN MARGE=0;
  90. /*L.PRIX*L.QUANTITE*(10000+L.TVA-(L.REMISE*100))/10000*/
  91. IF (INDXA IS NULL) THEN MARGE=0;
  92. ELSE
  93.   BEGIN
  94.   IF (TYPE_MARGE=2) THEN MARGE=:MARGE_A;
  95.   ELSE
  96.     BEGIN
  97.     IF (TYPE_MARGE IS NULL OR TYPE_MARGE<>1) THEN
  98.       BEGIN
  99.       IF (PMPA IS NULL) THEN SELECT PMPA FROM GET_PMPA(:INDXA) INTO :DPAU;
  100.       ELSE DPAU = PMPA;
  101.       END
  102.     /* DPAU contient le prix d'achat . Soustraire le prix de vente */
  103.     END
  104.   IF ((REMISE IS NOT NULL) AND (REMISE<>0)) THEN PRIX = PRIX * (100 - REMISE) / 100;
  105.   MARGE = (PRIX - DPAU) * QUANTITE;
  106.   END
  107. IF (MARGE_L IS NULL OR MARGE_L<>MARGE) THEN UPDATE LIGNES SET MARGE=:MARGE WHERE INDEXPIECE=:INDEX_PIECE AND NOLIGNE=:NO_LIGNE;
  108. SUSPEND;
  109. END
  110.  ;
  111.  
  112.  
  113. CREATE PROCEDURE "GET_MARGE_PIECE"
  114. (
  115.   "INDEX_PIECE" INTEGER
  116. )
  117. RETURNS
  118. (
  119.   "MARGE" DECIMAL(14, 6)
  120. )
  121. AS
  122. DECLARE VARIABLE NOLIGNE SMALLINT;
  123. DECLARE VARIABLE MARGE1 DECIMAL(14,4);
  124. BEGIN
  125. MARGE = 0;
  126. FOR SELECT NOLIGNE FROM LIGNES WHERE INDEXPIECE=:INDEX_PIECE INTO :NOLIGNE DO
  127.   BEGIN
  128.   SELECT MARGE FROM GET_MARGE_LIGNE(:INDEX_PIECE,:NOLIGNE) INTO :MARGE1;
  129.   IF (MARGE1 IS NOT NULL) THEN MARGE = MARGE + MARGE1;
  130.   END
  131. SUSPEND;
  132. END
  133.  ;
  134.  
  135. CREATE PROCEDURE "MAJ_DPA"
  136. (
  137. INDXART INTEGER,
  138. DPA1 DECIMAL(14,4),
  139. LOT DECIMAL(11,2)
  140. )
  141. AS
  142. DECLARE VARIABLE DPA2 DECIMAL(14,4);
  143. BEGIN
  144. IF ((LOT IS NOT NULL) AND (LOT>0)) THEN DPA1=DPA1 / LOT;
  145. SELECT DPAUHT FROM ARTICLES WHERE INDX=:INDXART INTO :DPA2;
  146. IF (DPA1<>DPA2) THEN UPDATE ARTICLES SET DPAUHT=:DPA1 WHERE INDX=:INDXART;
  147. EXIT;
  148. END
  149. ;
  150.  
  151. CREATE TRIGGER "INS_ARTFOUR" FOR "ARTFOUR"
  152. ACTIVE AFTER INSERT POSITION 0
  153. as
  154.     begin
  155.     EXECUTE PROCEDURE MAJ_DPA(new."INDXART",NEW."DPA",new."LOT");
  156.     end
  157.  ;
  158.  
  159. CREATE TRIGGER "UPD_ARTFOUR" FOR "ARTFOUR"
  160. ACTIVE AFTER UPDATE POSITION 0
  161. as
  162.     begin
  163.     IF ((new."DPA"<>OLD."DPA") OR (new."LOT"<>old."LOT")) THEN EXECUTE PROCEDURE MAJ_DPA(new."INDXART",NEW."DPA",new."LOT");
  164.     end
  165.  ;
  166.  
  167. DECLARE EXTERNAL FUNCTION abs
  168.     DOUBLE PRECISION
  169.     RETURNS DOUBLE PRECISION BY VALUE
  170.     ENTRY_POINT 'IB_UDF_abs' MODULE_NAME 'ib_udf';
  171.  
  172. ALTER TABLE RAYONS ADD CPTIMPORT VARCHAR(15);
  173. UPDATE RAYONS SET CPTVENTE='700000';
  174. UPDATE RAYONS SET CPTACHAT='600000';
  175. UPDATE RAYONS SET CPTIMPORT='607050';
  176. UPDATE RAYONS SET CPTEXPORT='707050';
  177. commit;
  178.  
  179. DECLARE EXTERNAL FUNCTION substrlen
  180.     CSTRING(32000), SMALLINT, SMALLINT
  181.     RETURNS CSTRING(255) FREE_IT
  182.     ENTRY_POINT 'IB_UDF_substrlen' MODULE_NAME 'ib_udf';
  183.  
  184. CREATE PROCEDURE "INTERROGATION_PONTV"
  185. (
  186.   "DATEDEB" DATE,
  187.   "DATEFIN" DATE,
  188.   "DETAIL_VERSEMENTS" SMALLINT,
  189.   "DETAIL_TVA" SMALLINT,
  190.   "DETAIL_TVA_PORT" SMALLINT,
  191.   "DETAIL_HT" SMALLINT
  192. )
  193. RETURNS
  194. (
  195.   "DATEPIECE" TIMESTAMP,
  196.   "NOPIECE" VARCHAR(15),
  197.   "NOLIGNE" SMALLINT,
  198.   "INFO1" VARCHAR(15),
  199.   "INFO2" VARCHAR(15),
  200.   "LIBELLE" VARCHAR(85),
  201.   "DEBIT" DECIMAL(12, 2),
  202.   "CREDIT" DECIMAL(12, 2),
  203.   "ESTPAYE" CHAR(1),
  204.   "ESTESP" CHAR(1)
  205. )
  206. AS
  207. DECLARE VARIABLE TTC DECIMAL(12,2);
  208. DECLARE VARIABLE M1 DECIMAL(12,2);
  209. DECLARE VARIABLE TVA DECIMAL(12,2);
  210. DECLARE VARIABLE HT DECIMAL(12,2);
  211. DECLARE VARIABLE INDX INTEGER;
  212. DECLARE VARIABLE NOTIERS INTEGER;
  213. DECLARE VARIABLE ST VARCHAR(200);
  214. DECLARE VARIABLE TYPEPIECE VARCHAR(35);
  215. DECLARE VARIABLE TYPEVERS VARCHAR(35);
  216. DECLARE VARIABLE TAUX DECIMAL(6,2);
  217. DECLARE VARIABLE TAUXTVA INTEGER;
  218. DECLARE VARIABLE TVAPORT INTEGER;
  219. DECLARE VARIABLE PORT DECIMAL(12,2);
  220. DECLARE VARIABLE I INTEGER;
  221. BEGIN
  222. FOR SELECT P.INDX,P.DATEPIECE,P.NOPIECE,P.TOTALHT,P.TOTALTVA,P.TOTALTTC,P.NOTIERS,P.TVAPORT,P.PORT,
  223.     T.COMPTGENE,T.COMPTAUXI,C.DESIGNATION
  224.     FROM PIECES P
  225.     LEFT JOIN CLIENTS T ON T.INDX=P.NOTIERS
  226.     LEFT JOIN CHAINES C on (c.TYPEC=0) AND (c.LIGNE=p.TYPEPIECE) AND (C.COLONNE=0)
  227.     WHERE P.TOTALTTC<>0 AND P.DATEPONT IS NULL AND P.DATEPIECE>=:DATEDEB
  228.     AND P.DATEPIECE<=:DATEFIN AND Z<>0
  229.     ORDER BY P.DATEPIECE
  230.     INTO :INDX,:DATEPIECE,:NOPIECE,:HT,:TVA,:TTC,:NOTIERS,:TVAPORT,:PORT,
  231.     :INFO1,:INFO2,:TYPEPIECE DO
  232.   BEGIN
  233.   NOLIGNE=1;
  234.   IF (INFO1 IS NULL OR INFO1='') THEN INFO1='411000';
  235.   SELECT SUM(MONTANT) FROM VERSEMENTS WHERE INDEXPIECE=:INDX INTO :M1;
  236.   IF (TTC=M1) THEN ESTPAYE = 'O'; ELSE ESTPAYE = 'N';
  237.   SELECT SUM(MONTANT) FROM VERSEMENTS WHERE INDEXPIECE=:INDX AND TYPEV=0 INTO :M1;
  238.   IF (TTC=M1) THEN ESTESP = 'O'; ELSE ESTESP = 'N';
  239.   IF (NOTIERS>0) THEN SELECT AVALUE FROM GET_NOM_CLIENT(:NOTIERS) INTO :ST;
  240.                  ELSE ST = 'N░ ' || NOPIECE;
  241.   /* LIGNE 1 (Montant TTC) */
  242.   IF (DETAIL_VERSEMENTS<>0) THEN
  243.     BEGIN
  244.     /* DΘtailler les versements */
  245.     FOR SELECT C.DESIGNATION,V.MONTANT FROM VERSEMENTS V
  246.         LEFT JOIN CHAINES C on (c.TYPEC=22) AND (c.LIGNE=V.TYPEV) AND (C.COLONNE=0)
  247.         WHERE V.INDEXPIECE=:INDX AND V.MONTANT<>0
  248.         ORDER BY V.DATEV
  249.         INTO :TYPEVERS,:M1 DO
  250.       BEGIN
  251.       TTC = TTC-M1;
  252.       CREDIT=NULL;
  253.       DEBIT=NULL;
  254.       IF (M1<0) THEN CREDIT=-M1; ELSE DEBIT=M1;
  255.       LIBELLE = TYPEVERS || ' ' || TYPEPIECE || ' ' || ST;
  256.       SUSPEND;
  257.       END
  258.     END
  259.   CREDIT=NULL;
  260.   DEBIT=NULL;
  261.   IF(TTC<>0) THEN
  262.     BEGIN
  263.     LIBELLE = TYPEPIECE || ' ' || ST;
  264.     IF (TTC<0) THEN CREDIT=-TTC; ELSE DEBIT=TTC;
  265.     SUSPEND;
  266.     END
  267.  
  268.   /*
  269.   * LIGNE 2
  270.   * (TVA)
  271.   */
  272.   NOLIGNE=2;
  273.   INFO1 = '445710';
  274.   IF (DETAIL_TVA<>0 AND TVA<>0) THEN
  275.     BEGIN
  276.     FOR SELECT TVA,SUM(l.PRIX*l.QUANTITE*((100-L.REMISE)/100)*TVA/10000) FROM LIGNES L
  277.         WHERE INDEXPIECE=:INDX AND TVA<>0
  278.         GROUP BY TVA INTO :TAUXTVA,:M1 DO
  279.       BEGIN
  280.       CREDIT=NULL;
  281.       DEBIT=NULL;
  282.       /* Tva sur Port */
  283.       IF (DETAIL_TVA_PORT=0 AND TAUXTVA=TVAPORT AND PORT<>0) THEN
  284.         BEGIN
  285.         M1 = M1 + (PORT * TVAPORT /10000);
  286.         TVAPORT = 0;
  287.         END
  288. /*      IF ( (TVA>M1 AND (TVA-M1)<0.02) OR (TVA<M1 AND (M1-TVA)<0.02)) THEN M1=TVA;*/
  289.       IF (ABS(TVA-M1)<0.03) THEN M1=TVA;
  290.       LIBELLE = 'TVA ' || CAST(CAST(TAUXTVA AS DECIMAL(6,2)) / 100 AS VARCHAR(8)) || '%';
  291.       TVA = TVA - M1;
  292.       IF (M1>0) THEN CREDIT=M1; ELSE DEBIT=-M1;
  293.       INFO2 = TAUXTVA;
  294.       SUSPEND;
  295.       END
  296.     END
  297.   /* Cas rare= Port taxΘ sur une piΦce HT */
  298.   IF (TVAPORT<>0 AND PORT<>0) THEN
  299.     BEGIN
  300.     M1 = PORT * TVAPORT /10000;
  301.     TVAPORT = 0;
  302.     LIBELLE = 'TVA ' || CAST(CAST(TAUXTVA AS DECIMAL(6,2)) / 100 AS VARCHAR(8)) || '%';
  303.     IF (ABS(TVA-M1)<0.03) THEN M1=TVA;
  304.     TVA = TVA - M1;
  305.     IF (M1>0) THEN CREDIT=M1; ELSE DEBIT=-M1;
  306.     INFO2 = 'PORT';
  307.     SUSPEND;
  308.     END
  309.   /* Le reste de la TVA */
  310.   IF (TVA<>0) THEN
  311.     BEGIN
  312.     CREDIT=NULL;
  313.     DEBIT=NULL;
  314.     LIBELLE = 'TVA';
  315.     IF (TVA>0) THEN CREDIT=TVA; ELSE DEBIT=-TVA;
  316.     SUSPEND;
  317.     END
  318.  
  319.   /*
  320.   * LIGNE 3
  321.   * (LIGNES DE FACTURE HT)
  322.   */
  323.   NOLIGNE=3;
  324.   INFO2 = '';
  325.   FOR SELECT SUBSTRLEN(D.TEXTE,1,85),l.PRIX*l.QUANTITE*((100-L.REMISE)/100) AS TOT,L.TVA,R.CPTVENTE,R.CPTEXPORT
  326.       FROM LIGNES L
  327.       LEFT JOIN ARTICLES A ON A.INDX=L.INDEXARTICLE
  328.       LEFT JOIN DESIGNATIONS D ON D.INDXART=L.INDEXARTICLE AND D.CODELANGUE=1
  329.       LEFT JOIN RAYONS R ON R.PKEY=A.PKEYR
  330.       WHERE L.INDEXPIECE=:INDX AND PRIX<>0 AND QUANTITE<>0
  331.       ORDER BY 2 DESC
  332.       INTO :LIBELLE,:M1,:TAUXTVA,:INFO1,:ST DO IF (HT<>0) THEN
  333.     BEGIN
  334.     CREDIT=NULL;
  335.     DEBIT=NULL;
  336.     IF (TAUXTVA=0) THEN INFO1 = ST;
  337.     IF ((DETAIL_HT=0) OR (ABS(HT-M1)<0.03)) THEN M1 = HT;
  338.     HT = HT - M1;
  339.     IF (M1>0) THEN CREDIT=M1; ELSE DEBIT=-M1;
  340.     SUSPEND;
  341.     END
  342.   IF (HT<>0) THEN
  343.     /* ProblΦme d'arrondi */
  344.     BEGIN
  345.     CREDIT=NULL;
  346.     DEBIT=NULL;
  347.     LIBELLE = 'Arrondi sur HT';
  348.     INFO2 = 'ARRONDI';
  349.     IF (HT>0) THEN CREDIT=HT; ELSE DEBIT=-HT;
  350.     SUSPEND;
  351.     END
  352.   END
  353. END
  354.  ;
  355.  
  356. CREATE PROCEDURE "INTERROGATION_PONTA"
  357. (
  358.   "DATEDEB" DATE,
  359.   "DATEFIN" DATE,
  360.   "DETAIL_VERSEMENTS" SMALLINT,
  361.   "DETAIL_TVA" SMALLINT,
  362.   "DETAIL_TVA_PORT" SMALLINT,
  363.   "DETAIL_HT" SMALLINT
  364. )
  365. RETURNS
  366. (
  367.   "DATEPIECE" TIMESTAMP,
  368.   "NOPIECE" VARCHAR(15),
  369.   "NOLIGNE" SMALLINT,
  370.   "INFO1" VARCHAR(15),
  371.   "INFO2" VARCHAR(15),
  372.   "LIBELLE" VARCHAR(85),
  373.   "DEBIT" DECIMAL(12, 2),
  374.   "CREDIT" DECIMAL(12, 2),
  375.   "ESTPAYE" CHAR(1),
  376.   "ESTESP" CHAR(1)
  377. )
  378. AS
  379. DECLARE VARIABLE TTC DECIMAL(12,2);
  380. DECLARE VARIABLE M1 DECIMAL(12,2);
  381. DECLARE VARIABLE TVA DECIMAL(12,2);
  382. DECLARE VARIABLE HT DECIMAL(12,2);
  383. DECLARE VARIABLE INDX INTEGER;
  384. DECLARE VARIABLE NOTIERS INTEGER;
  385. DECLARE VARIABLE ST VARCHAR(200);
  386. DECLARE VARIABLE TYPEPIECE VARCHAR(35);
  387. DECLARE VARIABLE TYPEVERS VARCHAR(35);
  388. DECLARE VARIABLE TAUX DECIMAL(6,2);
  389. DECLARE VARIABLE TAUXTVA INTEGER;
  390. DECLARE VARIABLE TVAPORT INTEGER;
  391. DECLARE VARIABLE PORT DECIMAL(12,2);
  392. DECLARE VARIABLE I INTEGER;
  393. BEGIN
  394. FOR SELECT P.INDX,P.DATEPIECE,P.NOPIECE,P.TOTALHT,P.TOTALTVA,P.TOTALTTC,P.NOTIERS,P.TVAPORT,P.PORT,
  395.     T.COMPTGENE,T.COMPTAUXI,C.DESIGNATION
  396.     FROM PIECES P
  397.     LEFT JOIN CLIENTS T ON T.INDX=P.NOTIERS
  398.     LEFT JOIN CHAINES C on (c.TYPEC=0) AND (c.LIGNE=p.TYPEPIECE) AND (C.COLONNE=0)
  399.     WHERE P.TOTALTTC<>0 AND P.DATEPONT IS NULL AND P.DATEPIECE>=:DATEDEB
  400.     AND P.DATEPIECE<=:DATEFIN AND TYPEPIECE IN (13,14)
  401.     ORDER BY P.DATEPIECE
  402.     INTO :INDX,:DATEPIECE,:NOPIECE,:HT,:TVA,:TTC,:NOTIERS,:TVAPORT,:PORT,
  403.     :INFO1,:INFO2,:TYPEPIECE DO
  404.   BEGIN
  405.   NOLIGNE=1;
  406.   IF (INFO1 IS NULL OR INFO1='') THEN INFO1='401000';
  407.   SELECT SUM(MONTANT) FROM VERSEMENTS WHERE INDEXPIECE=:INDX INTO :M1;
  408.   IF (TTC=M1) THEN ESTPAYE = 'O'; ELSE ESTPAYE = 'N';
  409.   SELECT SUM(MONTANT) FROM VERSEMENTS WHERE INDEXPIECE=:INDX AND TYPEV=0 INTO :M1;
  410.   IF (TTC=M1) THEN ESTESP = 'O'; ELSE ESTESP = 'N';
  411.   IF (NOTIERS>0) THEN SELECT AVALUE FROM GET_NOM_CLIENT(:NOTIERS) INTO :ST;
  412.                  ELSE ST = 'N░ ' || NOPIECE;
  413.   /* LIGNE 1 (Montant TTC) */
  414.   IF (DETAIL_VERSEMENTS<>0) THEN
  415.     BEGIN
  416.     /* DΘtailler les versements */
  417.     FOR SELECT C.DESIGNATION,V.MONTANT FROM VERSEMENTS V
  418.         LEFT JOIN CHAINES C on (c.TYPEC=22) AND (c.LIGNE=V.TYPEV) AND (C.COLONNE=0)
  419.         WHERE V.INDEXPIECE=:INDX AND V.MONTANT<>0
  420.         ORDER BY V.DATEV
  421.         INTO :TYPEVERS,:M1 DO
  422.       BEGIN
  423.       TTC = TTC-M1;
  424.       CREDIT=NULL;
  425.       DEBIT=NULL;
  426.       IF (M1>0) THEN CREDIT=M1; ELSE DEBIT=-M1;
  427.       LIBELLE = TYPEVERS || ' ' || TYPEPIECE || ' ' || ST;
  428.       SUSPEND;
  429.       END
  430.     END
  431.   CREDIT=NULL;
  432.   DEBIT=NULL;
  433.   IF(TTC<>0) THEN
  434.     BEGIN
  435.     LIBELLE = TYPEPIECE || ' ' || ST;
  436.     IF (TTC>0) THEN CREDIT=TTC; ELSE DEBIT=-TTC;
  437.     SUSPEND;
  438.     END
  439.  
  440.   /*
  441.   * LIGNE 2
  442.   * (TVA)
  443.   */
  444.   NOLIGNE=2;
  445.   INFO1 = '445660';
  446.   IF (DETAIL_TVA<>0 AND TVA<>0) THEN
  447.     BEGIN
  448.     FOR SELECT TVA,SUM(l.PRIX*l.QUANTITE*((100-L.REMISE)/100)*TVA/10000) FROM LIGNES L
  449.         WHERE INDEXPIECE=:INDX AND TVA<>0
  450.         GROUP BY TVA INTO :TAUXTVA,:M1 DO
  451.       BEGIN
  452.       CREDIT=NULL;
  453.       DEBIT=NULL;
  454.       /* Tva sur Port */
  455.       IF (DETAIL_TVA_PORT=0 AND TAUXTVA=TVAPORT AND PORT<>0) THEN
  456.         BEGIN
  457.         M1 = M1 + (PORT * TVAPORT /10000);
  458.         TVAPORT = 0;
  459.         END
  460.       IF (ABS(TVA-M1)<0.03) THEN M1=TVA;
  461.       LIBELLE = 'TVA ' || CAST(CAST(TAUXTVA AS DECIMAL(6,2)) / 100 AS VARCHAR(8)) || '%';
  462.       TVA = TVA - M1;
  463.       IF (M1<0) THEN CREDIT=-M1; ELSE DEBIT=M1;
  464.       INFO2 = TAUXTVA;
  465.       SUSPEND;
  466.       END
  467.     END
  468.   /* Cas rare= Port taxΘ sur une piΦce HT */
  469.   IF (TVAPORT<>0 AND PORT<>0) THEN
  470.     BEGIN
  471.     M1 = PORT * TVAPORT /10000;
  472.     TVAPORT = 0;
  473.     IF (ABS(TVA-M1)<0.03) THEN M1=TVA;
  474.     LIBELLE = 'TVA ' || CAST(CAST(TAUXTVA AS DECIMAL(6,2)) / 100 AS VARCHAR(8)) || '%';
  475.     TVA = TVA - M1;
  476.     IF (M1<0) THEN CREDIT=-M1; ELSE DEBIT=M1;
  477.     INFO2 = 'PORT';
  478.     SUSPEND;
  479.     END
  480.   /* Le reste de la TVA */
  481.   IF (TVA<>0) THEN
  482.     BEGIN
  483.     CREDIT=NULL;
  484.     DEBIT=NULL;
  485.     LIBELLE = 'TVA';
  486.     IF (TVA<0) THEN CREDIT=-TVA; ELSE DEBIT=TVA;
  487.     SUSPEND;
  488.     END
  489.  
  490.   /*
  491.   * LIGNE 3
  492.   * (LIGNES DE FACTURE HT)
  493.   */
  494.   NOLIGNE=3;
  495.   INFO2 = '';
  496.   FOR SELECT SUBSTRLEN(D.TEXTE,1,85),l.PRIX*l.QUANTITE*((100-L.REMISE)/100) AS TOT,L.TVA,R.CPTVENTE,R.CPTEXPORT
  497.       FROM LIGNES L
  498.       LEFT JOIN ARTICLES A ON A.INDX=L.INDEXARTICLE
  499.       LEFT JOIN DESIGNATIONS D ON D.INDXART=L.INDEXARTICLE AND D.CODELANGUE=1
  500.       LEFT JOIN RAYONS R ON R.PKEY=A.PKEYR
  501.       WHERE L.INDEXPIECE=:INDX AND PRIX<>0 AND QUANTITE<>0
  502.       ORDER BY 2 DESC
  503.       INTO :LIBELLE,:M1,:TAUXTVA,:INFO1,:ST DO IF (HT<>0) THEN
  504.     BEGIN
  505.     CREDIT=NULL;
  506.     DEBIT=NULL;
  507.     IF (TAUXTVA=0) THEN INFO1 = ST;
  508.     IF ((DETAIL_HT=0) OR (ABS(HT-M1)<0.03)) THEN M1 = HT;
  509.     HT = HT - M1;
  510.     IF (M1<0) THEN CREDIT=-M1; ELSE DEBIT=M1;
  511.     SUSPEND;
  512.     END
  513.   IF (HT<>0) THEN
  514.     /* ProblΦme d'arrondi */
  515.     BEGIN
  516.     CREDIT=NULL;
  517.     DEBIT=NULL;
  518.     LIBELLE = 'Arrondi sur HT';
  519.     INFO2 = 'ARRONDI';
  520.     IF (HT<0) THEN CREDIT=-HT; ELSE DEBIT=HT;
  521.     SUSPEND;
  522.     END
  523.   END
  524. END
  525.  ;
  526.  
  527. SET GENERATOR VERSION_BASE TO 73;
  528.